package demo1;

/**
 * @ClassName Singleton
 * @Description TODO
 * @Author 耀酱
 * @Date 2023/6/2 9:52
 * @Version 1.0
 */

public class Singleton {
    // 单例模式
    // 使用场景1 读取配置文件
    // 懒汉式，非线程安全的，仅作为理解，切记不要使用

    // 私有化静态成员变量，构造方法
//    private static Singleton instance = null;
//
//    private Singleton(){
//    }
//
//    public static Singleton getInstance(){
//       if(instance == null){
//           return new Singleton();
//       }
//       return instance;
//    }
//
//
//    // 双重检查锁，线程安全的，优化懒汉式，  也不推荐使用
//
//
//    // 饿汉式  不能延迟加载，也不推荐使用
//    private static Singleton instance1 = new Singleton();
//
//    public static Singleton getInstance1(){
//        return instance1;
//    }


    // 静态内部类的形式，  线程安全，调用效率高，支持延时加载，推荐使用


    private static class SingletonHoIer{
        // 静态初始化器，由jvm保证线程安全
        private static Singleton instance = new Singleton();
    }

    private Singleton(){

    }

    public static Singleton getInstance(){
        return SingletonHoIer.instance;
    }


}
